const { Readable } = require('stream');

// 自定义 MyReadable 构造函数，继承自 stream 模块的 Readable
class MyReadable extends Readable {
    constructor(options) {
        super(options);
        // 初始化字符 'a' 的 ASCII 码
        this.charCode = 'a'.charCodeAt(0);
        // 字符 'z' 的 ASCII 码
        this.endCharCode = 'z'.charCodeAt(0);
    }

    // 必须实现 _read 方法
    _read() {
        // 如果还没有到达 'z'
        if (this.charCode <= this.endCharCode) {
            // 将当前字符转换为字符串
            const char = String.fromCharCode(this.charCode);
            // 将字符推入内部缓冲区
            this.push(char);
            // 移动到下一个字符
            this.charCode++;
        } else {
            // 到达 'z' 后，推送 null 表示流结束
            this.push(null);
        }
    }
}

// 创建 MyReadable 实例
const myReadable = new MyReadable();

// 将自定义流连接到标准输出
myReadable.pipe(process.stdout);

// 处理流事件
myReadable.on('end', () => {
    console.log('\n流已结束');
});

myReadable.on('error', (err) => {
    console.error('流发生错误:', err);
});

console.log('开始输出 a-z 字符:');